<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>对象/数据类型</title>
		<link rel="stylesheet" type="text/css" href="css/reset.css"/>
		<link rel="stylesheet" type="text/css" href="css/common.css"/>
	</head>
	<body>
		<div class="web">
			<h1>对象/数据类型 </h1>
			<hr />
			<h2>对象</h2>
			<p>JavaScript是一种面向对象的语言</p>
			<p>对象就是由一些彼此相关的属性和方法集合在一起而构成的一个数据实体。</p>
			<p>对象是带有属性和方法的特殊数据类型。</p>
			<ul>
				<li>对象的比较并非值的比较:即使两个对象包含相同的属性及相同的值,他们也是不相等的</li>
				<li>var o = {x:1,y:2},p = {x:1,y:2}</li>
				<li>o === p   //返回false,两个单独的对象永不相等</li>
				<li>我们通常将对象称为引用类型,以此来和js的基本类型来区分开来,依照术语 的叫法,对象值都是引用,对象的比较都是引用的比较;当且仅当他们引用同一个对象时,他们才相等.</li>
				<li>例子:</li>
				<li>var arr = []</li>
				<li>var arr1 = arr; 当arr1改变时会影响到arr吗?</li>
				<li>基本类型在内存中具有固定的内存大小。例如：数值型在内存中占有八个字节，布尔值只占有一个字节。对于引用型数据，他们可以具有任意长度，因此他们的内存大小是不定的，因此变量中存储的实际上是对此数据的引用，通常是内存地址或者指针，通过它们我们可以找到这个数据。 </li>
			</ul>
			<details>
				<summary>类型转换</summary>
				<ul>
					<li>JavaScript根据值的需要自行转换如if()语句中</li>
					<li>String,Number,布尔值是原始类型,怎么会有方法和属性?---调用属性和方法时会转变成临时对象</li>
					<li><img src="img/7-string为什么有方法答案.png"/></li>
					<li>一个值可以转换成另外一个值,但并不表示两者相等</li>
					<li>null == undefined;"0" == 0;0 == false</li>
					<li>注意:除了null和undefined外,任何值都有toString()方法</li>
					<li>Number类到字符串的转变,toFixed()</li>
					<li>parseInt(),parseFloat(),是全局函数,不从属于任何类的方法</li>
				</ul>
				<img src="img/7-类型转换.png" style="margin-left: 80px;"/>
			</details>
			<details>
				<summary>判断变量类型</summary>
				<ul>
					<li><b>A判断字符串</b></li>
					<li>typeof(a)=='string'</li>
					<li><b>B判断数值</b></li>
					<li>typeof(a)=='number'</li>
					<li><b>C如果是一个数值类型，但内容不是一个有效的数字，会显示NaN</b></li>
					<li>判断NaN,isNaN(a)</li>
					<li><b>D判断变量是否为空（未定义变量或定义变量但没进行初始化就会出现）</b></li>
					<li>typeof(a)=='undefined'</li>
					<li><img src="img/typeof.png"/></li>
				</ul>

			</details>
		</div>
	</body>
</html>
